/**********************************************************************
* Filename: Participante.java
* Created: 2012/04/23
* @author Fernando Brito e Abreu
**********************************************************************/
package org.quasar.copaPaises.businessLayer;

import java.util.Set;
import java.util.HashSet;

public abstract class Participante
{
	
	/**********************************************************************
	* @return set with all instances of the current class
	**********************************************************************/
	public static Set<Participante> allInstances()
	{
		Set<Participante> result = new HashSet<Participante>();
		result.addAll(Jogador.allInstances);
		result.addAll(Treinador.allInstances);
		return result;
	}
	
	private CalendarDate data_nascimento;
	private String nome;
	private Pais nacionalidade;
	
	/**********************************************************************
	* Default constructor
	**********************************************************************/
	public Participante()
	{
	}
	
	/**********************************************************************
	* Parameterized constructor
	* @param data_nascimento the data_nascimento to initialize
	* @param nome the nome to initialize
	* @param nacionalidade the nacionalidade to initialize
	**********************************************************************/
	public Participante(CalendarDate data_nascimento, String nome, Pais nacionalidade)
	{
		this.data_nascimento = data_nascimento;
		this.nome = nome;
		this.nacionalidade = nacionalidade;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the data_nascimento of the participante
	**********************************************************************/
	public CalendarDate data_nascimento()
	{
		return data_nascimento;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param data_nascimento the data_nascimento to set
	**********************************************************************/
	public void setData_nascimento(CalendarDate data_nascimento)
	{
		this.data_nascimento = data_nascimento;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the nome of the participante
	**********************************************************************/
	public String nome()
	{
		return nome;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param nome the nome to set
	**********************************************************************/
	public void setNome(String nome)
	{
		this.nome = nome;
	}
	
	/**********************************************************************
	* ONE2MANY getter for Participante[*] <-> Pais[1]
	* @return the nacionalidade of the participante
	**********************************************************************/
	public Pais nacionalidade()
	{
		return nacionalidade;
	}
	
	/**********************************************************************
	* ONE2MANY setter for Participante[*] <-> Pais[1]
	* @param nacionalidade the nacionalidade to set
	**********************************************************************/
	public void setNacionalidade(Pais nacionalidade)
	{
		this.nacionalidade = nacionalidade;
	}
	
	/**********************************************************************
	* User-defined operation specified in SOIL/OCL
	* @param data the data to set
	**********************************************************************/
	public int idadeNaData(CalendarDate data)
	{
		return this.data_nascimento.yearsSince(data);
	}
	
	/* (non-Javadoc)
	* @see java.lang.Object#toString()
	*/
	
}
